package com.javabase.d01_base;

public class V03_typeConversion {
    public static void main(String[] args) {
        typeConversionV1();
        System.out.println("===========");
        typeConversionV2();
        System.out.println("===========");
        typeConversionV3();
        System.out.println("===========");
        typeConversionV4();
    }

    // 自动类型转换机制
    public static void typeConversionV1() {
        byte a = 12;
        int b = a;
        System.out.println(a);
        System.out.println(b);

        int c = 100; // 4
        double d = c;// 8 发生了自动类型转换了
        System.out.println(d);

        char ch = 'a'; // 'a' 97 => 00000000 01100001
        int i = ch; // 发生了自动类型转换了 =>  00000000 00000000  00000000 01100001
        System.out.println(i);
    }

    // 掌握表达式的自动类型转换机制
    public static void typeConversionV2() {
        byte a = 10;
        int b = 20;
        long c = 30;
        long rs = a + b + c;
        System.out.println(rs);

        double rs2 = a + b + 1.0;
        System.out.println(rs2);

        byte i = 10;
        short j = 30;
        int rs3 = i + j;
        System.out.println(rs3);

        // 面试笔试题：
        byte b1 = 110;
        byte b2 = 80;
        int b3 = b1 + b2;
        System.out.println(b3);
    }

    // 掌握强制类型转换
    public static void typeConversionV3() {
        int a = 20;
        byte b = (byte) a; // ALT + ENTER 强制类型转换。
        System.out.println(a);
        System.out.println(b);

        int i = 1500;
        byte j = (byte) i;
        System.out.println(j);

        double d = 99.5;
        int m = (int) d; // 强制类型转换
        System.out.println(m); // 丢掉小数部分，保留整数部分
    }

    // 掌握8种基本数据类型，用来定义变量
    /*
    *   1. 整数类型
        类型	    位数	取值范围	    默认值	    示例
        byte	8	-128 ～ 127	0	        byte b = 100;
        short	16	-32,768 ～ 32,767	0	short s = 5000;
        int	    32	-2³¹ ～ 2³¹-1（约±21亿）	0	int i = 100000;
        long	64	-2⁶³ ～ 2⁶³-1	0L	    long l = 100L;
        2. 浮点类型
        类型	    位数	取值范围	    默认值	    示例
        float	32	±1.4E-45 ～ ±3.4E38	0.0f	float f = 3.14f;
        double	64	±4.9E-324 ～ ±1.8E308	0.0	double d = 3.14;
        3. 字符类型
        类型	    位数	取值范围	    默认值	    示例
        char	16	0 ～ 65,535（Unicode）	\u0000	char c = 'A';
        4. 布尔类型
        类型	    位数	取值范围	    默认值	    示例
        boolean	1	true/false	false	    boolean flag = true;
    * */
    public static void typeConversionV4() {
        // 1、整型
        byte number1 = 88;
        short number2 = 9000;
        int number3 = 12323232; // 默认
        long number4 = 73642422442424L;
        System.out.println(number1);
        System.out.println(number2);
        System.out.println(number3);
        System.out.println(number4);

        // 2、浮点型
        float score1 = 99.5F;
        double score2 = 99.8; // 默认定义方案。

        // 3、字符型
        char ch1 = 'a';
        char ch2 = '中';
        char ch3 = '国';

        // 4、布尔型
        boolean b1 = true;
        boolean b2 = false;

        // 引用数据类型：String.
        String name = "字符串类型";
        System.out.println(name);
    }
}
